home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / documents / RFC / rfc891.txt < prev    next >
Text File  |  1994-08-01  |  65KB  |  1,417 lines

  1. Network Working Group                                   D.L.  Mills
  2. Request for Comments:  891                              December 1983
  3.  
  4.  
  5.                          DCN Local-Network Protocols
  6.  
  7. This RFC is a description of the protocol used in the DCN local
  8. networks to maintain connectivity, routing, and timekeeping
  9. information.  These procedures may be of interest to designers and
  10. implementers of other networks.
  11.  
  12. 1.  Introduction
  13.  
  14.      This document describes the local-net architecture and protocols
  15. of the Distributed Computer Network (DCN), a family of local nets
  16. based on Internet technology and an implementation of PDP11-based
  17. software called the Fuzzball.  DCN local nets have been in operation
  18. for about three years and now include clones in the USA, UK, Norway
  19. and West Germany.  They typically include a number of PDP11 or LSI-11
  20. Fuzzballs, one of which is elected a gateway, and often include other
  21. Internet-compatible hosts as well.
  22.  
  23.      The DCN local-net protocols are intended to provide connectivity,
  24. routing and timekeeping functions for a set of randomly connected
  25. personal computers and service hosts.  The design philosophy guiding
  26. the Fuzzball implementation is to incorporate complete functionality
  27. in every host, which can serve as a packet switch, gateway and service
  28. host all at the same time.  When a set of Fuzzballs are connected
  29. together using a haphazard collection of serial, parallel and
  30. contention-bus interfaces, they organize themselves into a network
  31. with routing based on minimum delay.
  32.  
  33.      The purpose of this document is to describe the local-net
  34. protocols used by the DCN to maintain connectivity, routing and
  35. timekeeping functions.  The document is an extensive revision and
  36. expansion of Section 4.2 of [1] and is divided into two parts, the
  37. first of which is an informal description of the architecture,
  38. together with explanatory remarks.  The second part consists of a
  39. semi-formal specification of the entities and protocols used to
  40. determine connectivity, establish routing and maintain clock
  41. synchronization and is designed to aid in the implementation of cohort
  42. systems.  The link-level coding is described in the appendix.
  43.  
  44. 2.  Narrative Description
  45.  
  46.      The DCN architecture is designed for local nets of up to 256
  47. hosts and gateways using the Internet Protocol (IP) and client
  48. protocols.  It provides adaptive routing and clock synchronization
  49. functions in an arbitrary topology including point-to-point links and
  50. multipoint bus systems.  It is intended for use in connecting personal
  51. computers to each other and to service machines, gateways and other
  52. hosts of the Internet community.  However, it is not intended for use
  53. in large, complex networks and does not support the sophisticated
  54. routing and control algorithms of, for example, the ARPANET.
  55.  
  56.      A brief description of the process and addressing structure used
  57. in the DCN may be useful in the following.  A DCN physical host is a
  58. PDP11-compatible processor which supports a number of cooperating
  59. sequential processes, each of
  60.  
  61. DCN Local-Network Protocols                                         Page 2
  62. D.L. Mills
  63.  
  64.  
  65. which is given a unique 8-bit identifier called its port ID.  Every
  66. DCN physical host contains one or more internet processes, each of
  67. which supports a virtual host given a unique 8-bit identifier called
  68. its host ID.
  69.  
  70.      Each virtual host can support multiple internet protocols,
  71. connections and, in addition, a virtual clock.  Each physical host
  72. contains a physical clock which can operate at an arbitrary rate and,
  73. in addition, a 32-bit logical clock which operates at 1000 Hz and is
  74. assumed to be reset each day at 0000 hours UT.  Not all physical hosts
  75. implement the full 32-bit precision; however, in such cases the
  76. resolution of the logical clock may be somewhat less.
  77.  
  78.      There is a one-to-one correspondence between Internet addresses
  79. and host IDs.  The host ID is formed from a specified octet of the
  80. Internet address to which is added a specified offset.  The octet
  81. number and offset are selected at configuration time and must be the
  82. same for all DCN hosts sharing the local net.  For class-B and class-C
  83. nets normally the fourth octet is used in this way for routing within
  84. the local net.  In the case of class-B nets, the third octet is
  85. considered part of the net number by DCN hosts; therefore, this octet
  86. can be used for routing between DCN local nets.  For class-A nets
  87. normally the third octet (ARPANET logical-host field) is used for
  88. routing where necessary.
  89.  
  90.      Each DCN physical host is identified by a host ID for the purpose
  91. of detecting loops in routing updates, which establish the
  92. minimum-delay paths between the virtual hosts.  By convention, the
  93. physical host ID is assigned as the host ID of one of its virtual
  94. hosts.  A link to a neigbor net is associated with a special virtual
  95. host, called a gateway, which is assigned a unique host ID.
  96.  
  97.      The links connecting the various physical hosts together and to
  98. foreign nets can be distributed in arbitrary ways, so long as the net
  99. remains fully connected.  If full connectivity is lost, due to a link
  100. or host fault, the virtual hosts in each of the surviving segments can
  101. continue to operate with each other and, once connectivity is
  102. restored, with all of them.
  103.  
  104.      Datagram routing is determined entirely by internet address -
  105. there is no local leader as in the ARPANET.  Each physical host
  106. contains two tables, the Host Table, which is used to determine the
  107. outgoing link to each other local-net host, and the Net Table, which
  108. is used to determine the outgoing host (gateway) to each other net.
  109. The Host Table contains estimates of roundtrip delay and logical-clock
  110. offset for all virtual hosts in the net and is indexed by host ID.
  111. For the purpose of computing these estimates the delay and offset of
  112. each virtual host relative to the physical host in which it resides is
  113. assumed zero.  The single exception to this is a special virtual host
  114. associated with an NBS radio time-code receiver, where the offset is
  115. computed relative to the broadcast time.
  116.  
  117.      The Net Table contains an entry for every neighbor net that may
  118. be connected to the local net and, in addition, certain other nets
  119. that are not
  120.  
  121. DCN Local-Network Protocols                                         Page 3
  122. D.L. Mills
  123.  
  124.  
  125. neighbors.  Each entry contains the net number, as well as the host ID
  126. of the local-net gateway to that net.  The routing function simply
  127. looks up the net number in the Net Table, finds the host ID of the
  128. gateway and retrieves the port ID of the net-output process from the
  129. Host Table.  Other information is included in the Host Table and Net
  130. Table as discribed below.
  131.  
  132.      The delay and offset estimates are updated by HELLO messages
  133. exchanged on the links connecting physical-host neighbors.  The HELLO
  134. messages are exchanged frequently, but not so as to materially degrade
  135. the throughput of the link for ordinary data messages.  A HELLO
  136. message contains a copy of the delay and offset information from the
  137. Host Table of the sender, as well as information to compute the
  138. roundtrip delay and logical-clock offset of the receiver relative to
  139. the sender.
  140.  
  141.      The routing algorithm is similar to that (formerly) used in the
  142. ARPANET and other places in that the roundtrip (biased) delay estimate
  143. calculated to a neighbor is added to each of the delay estimates given
  144. in its HELLO message and compared with the corresponding delay
  145. estimates in the Host Table.  If a delay computed in this way is less
  146. than the delay already in the Host Table, the routing to the
  147. corresponding virtual host is changed accordingly.  The detailed
  148. operation of this algorithm, which includes provisions for host
  149. up-down logic and loop suppression, is summarized in a later section.
  150.  
  151.      DCN local nets are self-configuring for all hosts and neighbor
  152. nets; that is, the routing algorithms will find minimum-delay paths
  153. between all hosts and gateways to neighbor nets.  In addition,
  154. timekeeping information can be exchanged using special HELLO messages
  155. between neighboring DCN local nets.  For routing beyond neighbor nets
  156. additional entries can be configured in the Net Tables as required.
  157. In addition, a special entry can be configured in the Net Tables which
  158. specifies the host ID of the gateway to all nets not explictly
  159. included in the table.
  160.  
  161.      For routing via the ARPANET and its reachable nets a selected
  162. local-net host is equipped with an IMP interface and configured with a
  163. GGP/EGP Gateway process.  This process maintains the Net Table of the
  164. local host, including ARPANET leaders, dynamically as part of the
  165. GGP/EGP protocol interactions with other ARPANET gateways.  GGP/EGP
  166. protocol interactions are possibly with non-ARPANET gateways as well.
  167.  
  168.      The portable virtual-host structure used in the DCN encourages a
  169. rather loose interpretation of addressing.  In order to minimize
  170. confusion in the following, the term "host ID" will be applied only to
  171. virtual hosts, while "host number" will be applied to the physical
  172. host, called generically the DCN host.
  173.  
  174. 2.1.  Net and Host Tables
  175.  
  176.      There are two tables in every DCN host which control routing of
  177. Internet Protocol (IP) datagrams: the Net Table and the Host Table.
  178. The Net Table is used to determine the host ID of the gateway on the
  179. route to a foreign net,
  180.  
  181. DCN Local-Network Protocols                                         Page 4
  182. D.L. Mills
  183.  
  184.  
  185. while the Host Table is used to determine the link, with respect to
  186. the DCN host, on the route to a virtual host.  The Host Table is
  187. maintained dynamically using updates generated by periodic HELLO
  188. messages.  The Net Table is fixed at configuration time for all DCN
  189. hosts except those that support a GGP/EGP Gateway process.  In these
  190. cases the Net Table is updated as part of the gateway operations.  In
  191. addition, entries in either table can be changed by operator commands.
  192.  
  193.      The Net Table format is shown in Figure 1.
  194.  
  195.                         1                   0 
  196.               5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  197.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  198.              |           Net Name            |
  199.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  200.              |    Net(2)     |    Net(1)     |
  201.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  202.              |    Index      |    Net(3)     |
  203.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  204.              |     Hops      |  Gateway ID   |
  205.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  206.              |                               |
  207.              |        Gateway Leader         |
  208.              |                               |
  209.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  210.  
  211.                  Figure 1. Net Table Entry
  212.  
  213.      The "Net Name" field defines a short (RAD50) name for the net,
  214. while the "Net" fields define the class A/B/C net number.  The
  215. "Gateway ID" field contains the host ID of the first gateway to the
  216. net and the "Hops" field the number of hops to it.  The remaining
  217. fields are used only by the GGP/EGP Gateway process and include the
  218. "Index" field, which contains an index into the routing matrix.  and
  219. the "Gateway Leader" field, which contains the (byte-swapped)
  220. local-net leader for the gateway on a neighbor net.
  221.  
  222.      The Net Table contains an indefinite number of entries and is
  223. terminated by a special entry with all "Net" fields set to zero.  If
  224. the "Hops" field of this entry is less than 255, the "Gateway ID"
  225. field of this entry is used for all nets not in the table.  If the
  226. "Hops" field is 255 all nets not explicitly mentioned in the table
  227. appear unreachable.
  228.  
  229.      The Host Table format is shown in Figure 2.
  230.  
  231. DCN Local-Network Protocols                                         Page 5
  232. D.L. Mills
  233.  
  234.  
  235.                         1                   0 
  236.               5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  237.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  238.              |             Name              |
  239.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  240.              |      TTL      |    Port ID    |
  241.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  242.              |             Delay             |
  243.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  244.              |             Offset            |
  245.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  246.              |                               |
  247.              +                               +
  248.              |          Local Leader         |
  249.              +                               +
  250.              |                               |
  251.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  252.              |                               |
  253.              +        Update Timestamp       +
  254.              |                               |
  255.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  256.  
  257.                 Figure 2. Host Table Entry
  258.  
  259.      The ordinal position of each Host Table entry corresponds to its
  260. host ID.  The "Name" field contains a short (RAD50) name for
  261. convenient reference.  The "Port ID" field contains the port ID of the
  262. net-output process on the shortest path to this virtual host and the
  263. "Delay" field contains the measured roundtrip delay to it.  The
  264. "Offset" field contains the difference between the logical clock of
  265. this host and the logical clock of the local host.  The "Local Leader"
  266. field contains information used to construct the local leader of the
  267. outgoing packet, for those nets that require it.  The "Update
  268. Timestamp" field contains the logical clock value when the entry was
  269. last updated and the "TTL" field the time (in seconds) remaining until
  270. the virtual host is declared down.
  271.  
  272.      All fields except the "Name" field are filled in as part of the
  273. routing update process, which is initiated upon arrival of a HELLO
  274. message from a neighboring DCN host.  This message takes the form of
  275. an IP datagram carrying the reserved protocol number 63 and a data
  276. field as shown in Figure 3.
  277.  
  278. DCN Local-Network Protocols                                         Page 6
  279. D.L. Mills
  280.  
  281.  
  282.                         1                   0 
  283.               5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  284.          --- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  285. Fixed        |           Checksum            |
  286. Area         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  287.              |             Date              |
  288.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  289.              |                               |
  290.              +              Time             +
  291.              |                               |
  292.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  293.              |           Timestamp           |
  294.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  295.              |     Offset    |   Hosts (n)   |
  296.          --- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  297. Host         |          Delay Host 0         |
  298. Area         +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  299.              |         Offset Host 0         |
  300.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  301.             ...                             ...
  302.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  303.              |         Delay Host n-1        |
  304.              +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  305.              |         Offset Host n-1       |
  306.          --- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  307.  
  308.                Figure 3. HELLO Message Format
  309.  
  310.      There are two HELLO message formats, depending on the length of
  311. the message.  One format, sent by a DCN host to another host on the
  312. same local net, includes both the fixed and host areas shown above.
  313. The second format, sent in all other cases, includes only the fixed
  314. area.
  315.  
  316.      Note that all word fields shown are byte-swapped with respect to
  317. the ordinary PDP11 representation.  The "Checksum" field contains a
  318. checksum covering the fields indicated.  The "Date" and "Time" fields
  319. are filled in with the local date and time of origination.  The
  320. "Timestamp" field is used in the computation of the roundtrip delay
  321. (see below).  The "Offset" field contains the offset of the block af
  322. Internet addresses used by the local net.  The "Delay Host n" and
  323. "Offset Host n" fields represent a copy of the corresponding entries
  324. of the Host Table as they exist at the time of origination.  The
  325. "Hosts (n)" field contains the number of entries in this table.
  326.  
  327. 2.2.  Roundtrip Delay Calculations
  328.  
  329.      Periodically, each DCN physical host sends a HELLO message to its
  330. neighbor on each of the communication links common to both of them.
  331. For each of these links the sender keeps a set of state variables,
  332. including a copy of the source-address field of the last HELLO message
  333. received.  
  334.  
  335. DCN Local-Network Protocols                                         Page 7
  336. D.L. Mills
  337.  
  338.  
  339. When constructing a HELLO message the sender sets the
  340. destination-address field to this state variable and the
  341. source-address field to its own address.  It then fills in the "Date"
  342. and "Time" fields from its logical clock and the "Timestamp" field
  343. from another state variable.  It finally copies the "Delay" and
  344. "Offset" values from its Host Table into the message.
  345.  
  346.      A host receiving a HELLO message discards it if the format is bad
  347. or the checksum fails.  If valid, it initializes a link state variable
  348. to show that the link is up.  Each time a HELLO message is transmitted
  349. this state variable is decremented.  If it decrements to zero the link
  350. is declared down.
  351.  
  352.      The host then checks if the source-address field matches the
  353. state variable containing the last address stored.  If not, the link
  354. has been switched to a new host, so the state variables are flushed
  355. and the link forced into a recovery state.  The host then checks if
  356. the destination-address field matches its own address.  If so, the
  357. message has been looped (legal only in the case of a broadcast net)
  358. and the roundtrip delay information is corrected.  The host and net
  359. areas are ignored in this case.  If not, the host and net areas of the
  360. message are processed to update the Host and Net Tables.
  361.  
  362.      Roundtrip delay calculations are performed in the following way.
  363. The link input/output processes assigned each link maintain an
  364. internal state variable which is updated as each HELLO message is
  365. received and transmitted.  When a HELLO message is received this
  366. variable takes the value of the "Time" field minus the current
  367. time-of-day.  When the next HELLO message is transmitted, the value
  368. assigned the "Timestamp" field is computed as the low-order 16-bits of
  369. this variable plus the current time-of-day.  The value of this
  370. variable is forced to zero if either the link is down of the system
  371. logical clock has been reset since the last HELLO message was
  372. received.
  373.  
  374.      If a HELLO message is received with zero "Timestamp" field, no
  375. processing other than filling in the internal state variable.
  376. Otherwise, the roundtrip delay is computed as the low-order 16-bits of
  377. the current time-of-day minus the value of this field.  In order to
  378. assure the highest accuracy, the calculation is performed only if the
  379. length of the last transmitted HELLO message (in octets) matches the
  380. length of the received HELLO message.
  381.  
  382.      The above technique renders the calculation independent of the
  383. clock offsets and intervals between HELLO messages at either host,
  384. protects against errors that might occur due to lost HELLO messages
  385. and works even when a neighbor host simply forwards the HELLO message
  386. back to the originator without modifying it.  The latter behavior,
  387. typical of ARPANET IMPs and gateways, as well as broadcast nets, relys
  388. on the loop-detection mechanism so that correct calculations can be
  389. made and, furthermore, that spurious host updates can be avoided.
  390.  
  391.  
  392. DCN Local-Network Protocols                                         Page 8
  393. D.L. Mills
  394.  
  395.  
  396. 2.3.  Host Updates
  397.  
  398.      When a HELLO message arrives which results in a valid roundtrip
  399. delay calculation, a host update process is performed.  This consists
  400. of adding the roundtrip delay to each of the "Delay Host n" entries in
  401. the HELLO message in turn and comparing each of these calculated
  402. delays to the "Host Delay" field of the corresponding Host Table
  403. entry.  Each entry is then updated according to the following rules:
  404.  
  405. 1.  If the link connects to another DCN host on the same net and the
  406.     port ID (PID) of the link output process matches the "Port ID"
  407.     field of the entry, then update the entry.
  408.  
  409. 2.  If the link connects to another DCN host on the same net, the PID
  410.     of the link output process does not match the "Port ID" field and the
  411.     calculated delay is less than the "Host Delay" field by at least a
  412.     specified switching threshold (currently 100 milliseconds), then
  413.     update the entry. 
  414.  
  415. 3.  If the link connects to a foreign net and is assigned a host ID
  416.     corresponding to the entry, then update the entry.  In this case
  417.     only, use as the calculated delay the roundtrip delay.
  418.     
  419. 4.  If none of the above conditions are met, or if the virtual host
  420.     has been declared down and the "TTL" field contains a nonzero
  421.     value, then no update is performed.
  422.  
  423.      The update process consists of replacing the "Delay" field with
  424. the calculated delay, the "Port ID" field with the PID of the link
  425. output process, the "Update Timestamp" field with the current time of
  426. day and the "TTL" field by a specified value (currently 120) in
  427. seconds.  If the calculated delay exceeds a specified maximum interval
  428. (currently 30 seconds), the virtual host is declared down by setting
  429. the corresponding "Delay" field to the maximum and the remaining
  430. fields as before.  For the purposes of delay calculations values less
  431. than a specified minimum (currently 100 milliseconds) are rounded up
  432. to that minimum.
  433.  
  434.      The "Offset" field is also replaced during the update process.
  435. When the HELLO message arrives, The value of the current logical clock
  436. is subtracted from the "Time" field and the difference added to
  437. one-half the roundtrip delay.  The resulting sum, which represents the
  438. offset of the local clock to the clock of the sender, is added to the
  439. corresponding "Offset" field of the HELLO message and the sum replaces
  440. the "Offset" field of the Host Table.  Thus, the "Offset" field in the
  441. Host Table for a particular virtual host is replaced only if that host
  442. is up and on the minimum-delay path to the DCN host.
  443.  
  444.      The purpose of the switching threshold in (2) above and the
  445. minimum delay specification in the update process is to avoid
  446. unnecessary switching between links and transient loops which can
  447. occur due to normal variations in propagation delays.  The purpose of
  448. the "TTL" field test in (4) above is to insure consistantcy by purging
  449. all paths to a virtual host when that virtual host goes down.
  450.  
  451.  
  452. DCN Local-Network Protocols                                         Page 9
  453. D.L. Mills
  454.  
  455.  
  456.      In addition to the updates performed as HELLO messages arrive, each
  457. virtual host in a DCN host also performs a periodic update of its own
  458. Host Table entry.  The update procedure is identical to the above,
  459. except that the calculated delay and offset are taken as zero.  At
  460. least one of the virtual hosts in a DCN host must have the same host
  461. ID as the host number assigned the DCN host itself and all must be
  462. assigned the same net number.  Other than these, there are no
  463. restrictions on the number or addresses of internet processes resident
  464. in a single DCN host.
  465.  
  466.      It should be appreciated that virtual hosts are truly portable
  467. and can migrate about the net, should such a requirement arise.  The
  468. host update protocols described here insure that the routing
  469. procedures always converge to the minimum-delay paths via operational
  470. links and DCN hosts.  In the case of broadcast nets such as Ethernets,
  471. the procedures are modified slightly as described below.  In this case
  472. the HELLO messages are used to determine routing from the various
  473. Ethernet hosts to destinations off the cable, as well as to provide
  474. time synchronization.
  475.  
  476. 2.4.  Timeouts
  477.  
  478.      The "TTL" field in every Host Table entry is decremented once a
  479. second in normal operation.  Thus, if following a host update another
  480. update is not received within an interval corresponding to the value
  481. initialized in that field, it decrements to zero, at which point the
  482. virtual host is declared down and the Host Table entry set as
  483. described above.  The 120-second interval used currently provides for
  484. at least four HELLO messages to be generated by every neighbor on
  485. every link during that interval, since the maximum delay between HELLO
  486. messages is 30 seconds on the lowest-speed link (1200 bps).  Thus, if
  487. no HELLO messages are lost, the maximum number of links between any
  488. virtual host and any other is four.
  489.  
  490.      The "TTL" field is initialized at 120 seconds when an update
  491. occurs and when the virtual host is declared down.  During the
  492. interval this field decrements to zero immediately after being
  493. declared down, updates are ignored.  This provides a decent interval
  494. for the bad news to propagate throughout the net and for the Host
  495. Tables in all DCN hosts to reflect the fact.  Thus, the formation of
  496. routing loops is prevented.
  497.  
  498.      The IP datagram forwarding procedures call for decrementing the
  499. "time-to-live" field in the IP header once per second or at each point
  500. where it is forwarded, whichever comes first.  The value used
  501. currently for this purpose is 30, so that an IP datagram can live in
  502. the net no longer than that number of seconds.  This is thus the
  503. maximum delay allowed on any path between two virtual hosts.  If this
  504. maximum delay is exceeded in calculating the roundtrip delay for a
  505. Host Table entry, the corresponding virtual host will be declared
  506. down.
  507.  
  508.  
  509. DCN Local-Network Protocols                                        Page 10
  510. D.L. Mills
  511.  
  512.      The interval between HELLO messages on any link depends on the
  513. data rate supported by the link.  As a general rule, this interval is
  514. set at 16 times the expected roundtrip time for the longest packet to
  515. be sent on that link.  For 1200-bps asynchronous transmission and
  516. packet lengths to 256 octets, this corresponds to a maximum HELLO
  517. message interval of about 30 seconds. 
  518.  
  519.      Although the roundtrip delay calculation, upon which the routing
  520. process depends, is relatively insensitive to net traffic and
  521. congestion, stochastic variations in the calculated values ordinarily
  522. occur due to coding (bit or character stuffing) and medium
  523. perturbations.  In order to suppress loops and needless path changes a
  524. minimum switching threshold is incorporated into the routing mechanism
  525. (see above).  The interval used for this threshold, as well as for the
  526. minimum delay on any path, is 100 milliseconds.
  527.  
  528. 3.  Formal Specification
  529.  
  530.      The following sections provide a formal framework which describe
  531. the DCN HELLO protocol.  This protocol is run between neighboring DCN
  532. hosts that share a common point-to-point link and provides automatic
  533. connectivity determination, routing and timekeeping functions.
  534.  
  535.      The descriptions to follow are organized as follows: First a
  536. summary of data structures describes the global variables and packet
  537. formats.  Then three processes which implement the protocol are
  538. described: the CLOCK, HELLO and HOST processes.  The description of
  539. these processes is organized into sections that describe (1) the local
  540. variables used by that process, (2) the parameters and constants and
  541. (3) the events that initiate processing together with the procedures
  542. they evoke.  In the case of variables a distinction is made between
  543. state variables, which retain their contents between procedure calls,
  544. and temporaries, which have a lifetime extending only while the
  545. process is running.  Except as noted below, the initial contents of
  546. state variables are unimportant.
  547.  
  548. 3.1.  Data Structures
  549.  
  550. 3.1.1.  Global Variables
  551.  
  552. ADDRESS
  553.     This is a 32-bit bit-string temporary variable used to contain an
  554.     Internet address.
  555.     
  556.  
  557. CLOCK-HID
  558.     This is an eight-bit integer state variable used to contain the
  559.     host ID of the local-net host to be used as the master clock.  It
  560.     is initialized to the appropriate value depending upon the net
  561.     configuration. 
  562.     
  563. DATE
  564.     This is a 16-bit bit-string state variable used to contain the
  565.     date in RT-11 format.  Bits 0-4 contain the year, with zero
  566.     corresponding to 1972, bits 5-9 contain the day of the month and
  567.     
  568.  
  569.  
  570. DCN Local-Network Protocols                                        Page 11
  571. D.L. Mills
  572.  
  573.     bits 10-14 contain the month, starting with one for January.
  574.  
  575. DATE-VALID
  576.     This is a one-bit state variable used to indicate whether the
  577.     local date and time are synchronized with the master clock.  A
  578.     value of one indicates the local clock is not synchronized with
  579.     the master clock.  This variable is set to one initially and when
  580.     the local time-of-day rolls over past midnight.  It is set to zero
  581.     each time a valid date and time update has been received from the
  582.     master clock. 
  583.     
  584. DELAY
  585.     This is a 16-bit integer temporary variable which represents the
  586.     roundtrip delay in milliseconds to a host.
  587.     
  588. HID
  589.     This is an eight-bit integer temporary variable containing the
  590.     host ID of some host on the local net.
  591.     
  592.     There is a one-to-one correspondence between the Internet
  593.     addresses of local hosts and their HIDs.  The mapping between them
  594.     is selected on the basis of the octet number of the Internet
  595.     address.  For DCN hosts it is the fourth octet, while for hosts
  596.     directly connected to a class-A ARPANET IMP or gateway, it is the
  597.     third octet (logical-host field).  The contents of this octet are
  598.     to be added to ADDRESS-OFFSET to form the HID associated 
  599.     with the address.
  600.  
  601. HOLD
  602.     This is an eight-bit counter state variable indicating whether
  603.     timestamps are valid or not.  While HOLD is nonzero, timestamps
  604.     should be considered invalid.  When set to some nonzero value, the
  605.     counter decrements to zero at a 1-Hz rate.  Its initial value is
  606.     zero. 
  607.     
  608. HOST-TABLE
  609.     This is a table of NHOSTS entries indexed by host ID (HID).  There
  610.     is one entry for each host in the local net.  Each entry has the
  611.     following format:
  612.  
  613.     HOST-TABLE.DELAY
  614.         This is a 16-bit field containing the computed roundtrip delay
  615.         in milliseconds to host HID.
  616.         
  617.     HOST-TABLE.OFFSET
  618.         This is a 16-bit field containing the computed signed offset
  619.         in milliseconds which must be added to the local apparent
  620.         clock to agree with the apparent clock of host HID.
  621.         
  622.     HOST-TABLE.PID
  623.         This is an eight-bit field containing the PID of the net-output
  624.         process selected by the routing algorithm to forward packets
  625.         to host HID.
  626.         
  627.  
  628. DCN Local-Network Protocols                                        Page 12
  629. D.L. Mills
  630.  
  631.  
  632.  HOST-TABLE.TTL
  633.      This is an eight-bit field used as a time-to-live indicator.
  634.      It is decremented by the HOST process once each second and
  635.      initialized to a chosen value when a HELLO message is
  636.      received. The table is initialized with the HOST-TABLE.DELAY
  637.      field set to  MAXDELAY for all entries.  The contents of the
  638.      other fields are unimportant. 
  639.   
  640. LOCAL-ADDRESS
  641.     This is a 32-bit bit-string state variable used to contain the 
  642.     local host Internet address.
  643.  
  644. NET-TABLE
  645.     This is a table of NNETS entries with the following format:
  646.  
  647.     NET-TABLE.HID
  648.         This is an eight-bit field containing the host ID of the
  649.         pseudo-process to forward packets to the NET-TABLE.NET net.
  650.  
  651.     NET-TABLE.NET
  652.         This is a 24-bit field containing an Internet class-A (eight
  653.         bits), class-B (16 bits) or class-C (24 bits) net number.
  654.         Note that the actual field width for class-B net numbers is 24
  655.         bits in order to provide a subnet capability, in which the
  656.         high-order eight bits of the 16-bit host address is
  657.         interpreted as the subnet number. 
  658.         
  659.     The table is constructed at configuration time and must include an
  660.     entry for every net that is a potential neighbor.  A neighbor net
  661.     is defined as a net containing a host that can be directly
  662.     connected to a host on the local net.  The entry for such a net is
  663.     initialized with NET-TABLE.NET set to the neighbor net number and
  664.     NET-TABLE.HID set to an arbitrary vitual-host ID not assigned any
  665.     other local-net virtual host. 
  666.     
  667.     The remaining entries in NET-TABLE are initialized at initial-boot
  668.     time with the NET-TABLE.NET fields set to zero and the
  669.     NET-TABLE.HID fields set to a configuration-selected host ID to be
  670.     used to forward packets to all nets other than neighbor nets.  In
  671.     the case where a gateway module is included in the local host
  672.     configuration, the GGP and/or EGP protocols will be used to
  673.     maintian these entries;  while, in the case where no gateway
  674.     module is included, only one such entry is required. 
  675.     
  676. OFFSET
  677.     This is a 16-bit signed integer temporary variable which
  678.     represents the offset in milliseconds to be added to the apparent
  679.     clock time to yield the apparent clock time of the neighbor host. 
  680.     
  681. 3.1.2.  Parameters
  682.  
  683. ADDRESS-OFFSET
  684.     This is an integer which represents the value of the Internet 
  685.     address field corresponding to the first host in HOST-TABLE.
  686.  
  687.  
  688. DCN Local-Network Protocols                                        Page 13
  689. D.L. Mills
  690.  
  691. NHOSTS
  692.     This is an integer which defines the number of entries in HOST-TABLE.
  693.  
  694. NNETS
  695.     This is an integer which defines the number of entries in MET-TABLE.
  696.  
  697. 3.1.3.  HELLO Packet Fields
  698.  
  699. PKT.ADDRESS-OFFSET
  700.     This eight-bit is copied from ADDRESS-OFFSET by the sender.
  701.  
  702. PKT.DATESTAMP
  703.     Bits 0-14 of this 16-bit field are copied from DATE by the sender, 
  704.     while bit 15 is copied from DATE-VALID.
  705.  
  706. PKT.DATE-VALID
  707.     This one-bit field is bit 15 of PKT.DATESTAMP.
  708.  
  709. PKT.DESTINATION
  710.     This 32-bit field is part of the IP header.  It is copied from
  711.     HLO.NEIGHBOR-ADDRESS by the sender.
  712.  
  713. PKT.HOST-TABLE
  714.     This is a table of PKT.NHOSTS entries, each entry of which
  715.     consists of two fields.  The entries are indexed by host ID and
  716.     have the following format: 
  717.  
  718.     PKT.HOST-TABLE.DELAY
  719.         This 16-bit field is copied from the corresponding HOST-TABLE.DELAY
  720.         field by the sender.
  721.  
  722.     PKT.HOST-TABLE.OFFSET
  723.         This 16-bit field is copied from the corresponding HOST-TABLE.OFFSET
  724.         field by the sender.
  725.  
  726. PKT.LENGTH
  727.     This 16-bit field is part of the IP header.  It is set by the sender to
  728.     the number of octets in the packet.
  729.  
  730. PKT.NHOSTS
  731.     This eight-bit field is copied from NHOST by the sender.
  732.  
  733. PKT.SOURCE
  734.     This 16-bit field is part of the IP header.  It is copied from
  735.     LOCAL-ADDRESS by the sender.
  736.  
  737. PKT.TIMESTAMP
  738.     This 32-bit field contains the apparent time the packet was transmitted 
  739.     in milliseconds past midnight UT.
  740.  
  741.  
  742. DCN Local-Network Protocols                                        Page 14
  743. D.L. Mills
  744.  
  745.  
  746. PKT.TSP
  747.     This 16-bit field contains a variable used in roundtrip delay
  748.     calculations.
  749.  
  750. 3.2 CLOCK Process (CLK)
  751.  
  752.      The timekeeping system maintains three clocks: (1) the physical
  753. clock, which is determined by a hardware oscillator/counter; (2) the
  754. apparent clock, which maintains the time-of-day used by client
  755. processes and (3) the actual clock, which represents the time-of-day
  756. provided by an outside reference.  The apparent and actual clocks are
  757. maintained as 48-bit quantities with 32 bits of significance available
  758. to client processes.  These clocks run at a rate of 1000 Hz and are
  759. reset at midnight UT.
  760.  
  761.      The CLOCK process consists of a set of state variables along with
  762. a set of procedures that are called as the result of hardware
  763. interrupts and client requests.  An interval timer is assumed
  764. logically separate from the local clock mechanism, although both could
  765. be derived from the same timing source.
  766.  
  767. 3.2.1.  Local Variables
  768.  
  769. CLK.CLOCK
  770.     This is a 48-bit fixed-point state variable used to represent the
  771.     apparent time-of-day.  The decimal point is to the right of bit 16
  772.     (numbering from the right at bit 0).  Bit 16 increments at a rate
  773.     equivalent to 1000 Hz independent of the hardware clock.  (In the
  774.     case of programmable-clock hardware the value of CLK.CLOCK must be
  775.     corrected as described below.) 
  776.     
  777. CLK.COUNT
  778.     This is a hardware register that increments at rate R.  It can be
  779.     represented by a simple line clock, which causes interrupts at the
  780.     line-frequency rate, or by a programmable clock, which contains a 16-bit
  781.     register that is programmed to count at a 1000-Hz rate and causes an
  782.     interrupt on overflow.  The register is considered a fixed-point variable
  783.     with decimal point to the right of bit 0.
  784.  
  785. CLK.DELTA
  786.     This is a 48-bit signed fixed-point state variable used to represent the
  787.     increment to be added to CLK.CLOCK to yield the actual time-of-day.  The
  788.     decimal point is to the right of bit 16.
  789.  
  790. 3.2.3.  Parameters
  791.  
  792. ADJUST-FRACTION
  793.     This is an integer which defines the shift count used to compute a
  794.     fraction that is used as a multiplier of CLK.DELTA to correct CLK.CLOCK
  795.     once each clock-adjust interval.  A value of seven is suggested.
  796.     
  797.  
  798. DCN Local-Network Protocols                                        Page 15
  799. D.L. Mills
  800.  
  801.  
  802. ADJUST-INTERVAL
  803.     This is an integer which defines the clock-adjust interval in
  804.     milliseconds.  A value of 500 (one-half second) is suggested for
  805.     the line clock and 4000 (four seconds) for the 1000-Hz clock.
  806.  
  807. CLOCK-TICK
  808.     This is a fixed-point integer which defines the increment in
  809.     milliseconds to be added to CLK.CLOCK as the result of a clock
  810.     tick.  The decimal point is to the right of bit 16.  In the case
  811.     of a line-clock interrupt, the value of CLOCK-TICK should be
  812.     16.66666 (60 Hz) or 20.00000 (50 Hz).  In the case of a 1000-Hz
  813.     programmable-clock overflow, the value should be 65536.00000.
  814.     
  815. HOLD-INTERVAL
  816.     This is an integer which defines the number of seconds that HOLD will
  817.     count down after CLK.CLOCK has been reset.  The resulting interval must be
  818.     at least as long as the maximum HELLO-INTERVAL used by any HELLO process.
  819.  
  820. 3.2.3.  Events and Procedures
  821.  
  822. INCREMENT-CLOCK Event
  823.     This event is evoked as the result of a tick interrupt, in the case of a
  824.     line clock, or a counter overflow, in the case of the 1000-Hz clock.  It
  825.     causes the logical clock to be incremented by the value of CLOCK-TICK.
  826.  
  827.     1.  Add the value of CLOCK-TICK to CLK.CLOCK.
  828.  
  829. ADJUST-CLOCK Event
  830.     This event is evoked once every ADJUST-INTERVAL milliseocnds to slew the
  831.     apparent clock time to the actual clock time as set by the SET-CLOCK
  832.     procedure.  This is done by subtracting a fraction of the correction
  833.     factor CLK.DELTA from the value of CLK.DELTA and adding the same fraction
  834.     to CLK.CLOCK.  This continues until either the next SET-CLOCK call or
  835.     CLK.DELTA has been reduced to zero.
  836.  
  837.     The suggested values for ADJUST-INTERVAL and ADJUST-FRACTION
  838.     represent a maximum slew rate of less than +-2 milliseconds per
  839.     second, in the case of 1000-Hz clock.  The action is to smooth
  840.     noisy clock corrections received from neighboring systems to
  841.     obtain a high-quality local reference, while insuring the apparent
  842.     clock time is always monotonically increasing. 
  843.     
  844.     1.  Shift the 48-bit value of CLK.DELTA arithmetically ADJUST-FRACTION
  845.         bits to the right, discarding bits from the right and saving the
  846.         result in a temporary variable F.  Assuming the decimal point of F to
  847.         be positioned to the right of bit 16 and sign-extending as necessary,
  848.         subtract F from CLK.DELTA and add F to CLK.CLOCK.
  849.  
  850.  
  851. DCN Local-Network Protocols                                        Page 16
  852. D.L. Mills
  853.  
  854.  
  855. DECREMENT-HOLD Event
  856.     This event is evoked once per second to decrement the value of HOLD.
  857.  
  858.     1.  If the value of HOLD is zero, do nothing;  otherwise, decrement its
  859.         value.
  860.  
  861. READ-CLOCK Procedure
  862.  
  863.     This procedure is called by a client process.  It returns the apparent
  864.     time-of-day computed as the integer part of the sum CLK.CLOCK plus
  865.     CLK.COUNT.  Note that the precision of the value returned is limited to
  866.     +-1 millisecond, so that client processes must expect the apparent
  867.     time to "run backward" occasionally due to drift correctins.  When
  868.     this happens the backward step will never be greater than one
  869.     millisecond and will never occur more often than twice per second.
  870.     
  871.     1.  In the case of line clocks CLK.COUNT is always zero, while in
  872.         the case of programmable clocks the hardware must be
  873.         interrogated to extract the value of CLK.COUNT.  If following
  874.         interrogation a counter-overflow condition is evident, add
  875.         CLOCK-TICK to CLK.CLOCK and interrogate the hardware again.
  876.         
  877.     2.  When the value of CLK.COUNT has been determined compute the sum
  878.         CLK.COUNT + CLK.CLOCK.  If this sum exceeds the number of
  879.         milliseconds in 24 hours (86,400,000), reduce CLK.CLOCK by
  880.         86,400,000, set HOLD-INTERVAL -> HOLD, set CLOCK-VALID (bit 15
  881.         of DATE) to one, roll over DATE to the next calender day and
  882.         start over.  If not, return the integer part of the sum as the
  883.         apparent time-of-day. 
  884.         
  885.         The CLOCK-VALID bit is set to insure that a master-clock update is
  886.         received at least once per day.  Note that, in the case of
  887.         uncompensated crystal oscillators of the type commonly used as the
  888.         1000-Hz time base, a drift of several parts per million can be
  889.         expected, which would result in a time drift of several tenths of a
  890.         second per day, if not corrected.
  891.  
  892. SET-CLOCK Procedure
  893.     This procedure is called by a client process.  It sets a time-of-day
  894.     correction factor in milliseconds.  The argument represents a 32-bit
  895.     signed fixed-point quantity with decimal point to the right of bit
  896.     0 that is to be added to CLK.CLOCK so that READ-CLOCK subsequently
  897.     returns the actual time-of-day.  
  898.     
  899.     1.  If the correction factor is in the range -2**(16-ADJUST-FRACTION) to
  900.         +2**(16-ADJUST-FRACTION) - 1 (about +-128 milliseconds with the
  901.         suggested value of ADJUST-FRACTION), the value of the argument
  902.         replaces CLK.DELTA and the procedure is complete.  If not, add the
  903.         value of the sign-extended argument to CLK.CLOCK and set CLK.DELTA to
  904.         zero.  In addition, set HOLD-INTERVAL -> HOLD, since this
  905.         represents a relatively large step-change in apparent time.
  906.         The value of HOLD represents the remaining number of seconds
  907.         in which timestamps should be considered invalid and is used
  908.         by the HELLO process to suppress roundtrip delay calculations
  909.         which might involve invalid timestamps. 
  910.  
  911.  
  912. DCN Local-Network Protocols                                        Page 17
  913. D.L. Mills
  914.  
  915.         
  916.  
  917. 3.3.  HELLO Process
  918.  
  919.      The HELLO process maintains clock synchronization with a neighbor
  920. HELLO process using the HELLO protocol.  It also participates in the
  921. routing algorithm.  There is one HELLO process and one set of local
  922. state variables for each link connecting the host to one of its
  923. neighbors.
  924.  
  925. 3.3.1.  Local variables
  926.  
  927. HLO.BROADCAST
  928.     This is a one-bit switch state variable.  When set to zero a
  929.     point-to-point link is assumed.  When set ot one a broadcast (e.g.
  930.     Ethernet) link is assumed.
  931.  
  932. HLO.KEEP-ALIVE
  933.     This is an eight-bit counter state variable used to indicate whether the
  934.     link is up.  It is initialized with a value of zero.
  935.  
  936. HLO.LENGTH
  937.     This is a 16-bit integer state variable used to record the length in
  938.     octets of the last HELLO message sent.
  939.  
  940. HLO.NEIGHBOR-ADDRESS
  941.     This is a 32-bit integer state variable used to contain the neighbor host
  942.     Internet address.
  943.  
  944. HLO.PID
  945.     This is an eight-bit integer state variable used to identify the
  946.     net-output process associated with this HELLO process.  It is initialized
  947.     by the kernel when the process is created and remains unchanged
  948.     thereafter.
  949.  
  950. HLO.POLL
  951.     This is a one-bit switch state variable.  When set the HELLO process
  952.     spontaneously sends HELLO messages.  When not set the HELLO process
  953.     responds to HELLO messages, but does not send them spontaneously.
  954.  
  955. HLO.TIMESTAMP
  956.     This is a 32-bit integer temporary variable used to record the time of
  957.     arrival of a HELLO message.
  958.  
  959. HLO.TSP
  960.     This is a 16-bit signed integer state variable used in roundtrip delay
  961.     calculations.
  962.  
  963.  
  964. DCN Local-Network Protocols                                        Page 18
  965. D.L. Mills
  966.  
  967.  
  968. 3.3.2.  Parameters
  969.  
  970. HELLO-INTERVAL
  971.     This is an integer which defines the interval in seconds between HELLO
  972.     messages.  It ranges from about eight to a maximum of 30 seconds,
  973.     depending on line speed.
  974.  
  975. HOLD-DOWN-INTERVAL
  976.     This is an integer which defines the interval in seconds a host will be
  977.     considered up following receipt of a HELLO message indicating that
  978.     host is up.  A value of 120 is suggested.
  979.     
  980. KEEP-ALIVE-INTERVAL
  981.     This is an integer which defines the interval, in units of
  982.     HELLO-INTERVAL, that a HELLO process will consider the link up.  A
  983.     value of four is suggested.
  984.     
  985. MAXDELAY
  986.     This is an integer which defines the maximum roundtrip delay in
  987.     seconds on a path to any reachable host.  A value of 30 is suggested.
  988.     
  989. MINDELAY
  990.     This is an integer which defines the minimum switching threshold in
  991.     milliseconds below which routes will not be changed.  A value of 100 is
  992.     suggested.
  993.  
  994. 3.3.3.  Events and Procedures
  995.  
  996. INPUT-PACKET Event
  997.     When a packet arrives the net-input process first sets HLO.TIMESTAMP to
  998.     the value returned by the READ-CLOCK procedure, then checks the
  999.     packet for valid local leader, IP header format and checksum.  If
  1000.     the protocol field in the IP header indicates a HELLO message, the
  1001.     packet is passed to the HELLO process.  If any errors are found
  1002.     the packet is dropped. 
  1003.     
  1004.     The HELLO process first checks the packet for valid HELLO header format
  1005.     and checksum.  If any errors are found the packet is dropped.  Otherwise,
  1006.     it proceeds as follows:
  1007.  
  1008.     1.  If PKT.SOURCE is equal to LOCAL-ADDRESS, then the line to the
  1009.         neighbor host is looped.  If this is a broadcast link
  1010.         (HLO.BROADCAST is set to one), then ignore this nicety;  if
  1011.         not, this is considered an error and further processing is
  1012.         abandoned.  Note that, in special configurations involving
  1013.         other systems (e.g.  ARPANET IMPs and gateways) it may be
  1014.         useful to use looped HELLO to monitor connectivity.  The DCN
  1015.         implementation provides this feature, but is not described here.
  1016.         
  1017.     2.  Set KEEP-ALIVE-INTERVAL -> HLO.KEEP-ALIVE.  This indicates the
  1018.         maximum number of HELLO intervals the HLO.TSP field is
  1019.         considered valid. 
  1020.  
  1021.  
  1022. DCN Local-Network Protocols                                        Page 19
  1023. D.L. Mills
  1024.  
  1025.  
  1026.     3.  Set PKT.TIMESTAMP - HLO.TIMESTAMP -> HLO.TSP.  This is part of the
  1027.         roundtrip delay calculation.  The value of HLO.TSP will be
  1028.         updated and returned to the neighbor in the next HELLO message
  1029.         transmitted.  Next, compute the raw roundtrip delay and offset:
  1030.         HLO.TIMESTAMP - PKT.TSP -> DELAY and HLO.TSP + DELAY/2 -> OFFSET. 
  1031.         Note:  in the case of a broadcast link (HLO.BROADCAST set to one) set
  1032.         DELAY to zero.
  1033.  
  1034.     4.  Perform this step only in the case of non-broadcast links
  1035.         (HLO.BROADCAST set to zero).  If PKT.SOURCE is not equal to
  1036.         HLO.NEIGHBOR-ADDRESS, then a new neighbor has appeared on this
  1037.         link. Set PKT.SOURCE -> HLO.NEIGHBOR ADDRESS, MAXDELAY ->
  1038.         DELAY and proceed to the next step.  This will force the line
  1039.         to be declared down and result in a hold-down cycle.
  1040.         Otherwise, if either PKT.TSP is zero or HOLD is nonzero, then
  1041.         the DELAY calculation is invalid and further processing is
  1042.         abandoned.  Note that a hold-down cycle is forced in any 
  1043.         case if a new neigbor is recognized.
  1044.  
  1045.     5.  If processing reaches this point the DELAY and OFFSET
  1046.         variables can be assumed valid as well as the remaining data
  1047.         in the packet.  First, if DELAY < MINDELAY, set MINDELAY ->
  1048.         DELAY.  This avoids needless path switching when the
  1049.         difference in delays is not significant and has the effect
  1050.         that on low-delay links the routing algorithm degenerates to 
  1051.         min-hop rather than min-delay.  Then set HLO.PID -> PID.  There are
  1052.         two cases:
  1053.  
  1054.         Case 1:  PKT.NHOSTS is zero.
  1055.             This will be the case when the neighbor host has just come up or
  1056.             is on a different net or subnet.  Set NEIGHBOR-ADDRESS -> ADDRESS
  1057.             and call the ROUTE procedure, which will return the host
  1058.             ID.  Then call the UPDATE procedure.  In the case of
  1059.             errors, do nothing but return.
  1060.             
  1061.         Case 2:  PKT.NHOSTS is nonzero.
  1062.             This is the case when the neighbor host is on the same net or
  1063.             subnet.  First, save the values of DELAY and OFFSET in temporary
  1064.             variables F and G.  Then, for each value of HID from zero to
  1065.             NHOSTS-1 consider the corresponding PKT.HOSTS-TABLE entry and do
  1066.             the following:  Set F + PKT.HOST-TABLE.DELAY -> DELAY and
  1067.             G + PKT.HOST-TABLE.OFFSET -> OFFSET and call the UPDATE procedure.
  1068.             This completes processing.
  1069.  
  1070.         ROUTE Procedure
  1071.             This procedure returns the host ID in HID of the host represented
  1072.             by the global variable ADDRESS.
  1073.  
  1074.     1.  First, determine if the host represented by ADDRESS is on the same
  1075.         local net as LOCAL-ADDRESS.  For the purposes of this
  1076.         comparison bits 0-7 and 16-31 are compared for class-A nets
  1077.         and bits 8-31 are compared for class-B and class-C nets.  This
  1078.         provides for a subnet capability, where the bits 0-7 and 16-23
  1079.         (class-A) or 8-15 (class-B) are used as a subnet number.
  1080.  
  1081.  
  1082. DCN Local-Network Protocols                                        Page 20
  1083. D.L. Mills
  1084.  
  1085.         
  1086.         Case 1:  The host is on the same net or subnet.
  1087.             Extract the address field of ADDRESS, subtract ADDRESS-OFFSET and
  1088.             store the result in HID.  If 0 <= HID < NHOSTS, the procedure
  1089.             completes normally;  otherwise it terminates in an error
  1090.             condition.
  1091.  
  1092.         Case 2:  The host is not on the same net or subnet.
  1093.             Search the NET-TABLE for a match of the net fields of
  1094.             LOCAL-ADDRESS and NET-TABLE.NET.  If found set
  1095.             NET-TABLE.HID -> HID and return normally.  If the NET-TABLE.NET
  1096.             field is zero, indicating the last entry in the table, set
  1097.             HET-TABLE.HID -> HID and return normally.  Note that, in the case
  1098.             of hosts including GGP/EGP gateway modules, if no match is found
  1099.             the procedure terminates in an error condition.
  1100.  
  1101. UPDATE Procedure
  1102.     This procedure updates the entry of HOST-TABLE indicated by HID using
  1103.     three global variables:  DELAY, OFFSET and PID.  Its purpose is to update
  1104.     the HOST-TABLE entry corresponding to host ID HID.  In the following all
  1105.     references are to this entry.
  1106.  
  1107.     1.  If PID is not equal to HOST-TABLE.PID, the route to host HID is not
  1108.         via the net-output process associated with this HELLO process.  In
  1109.         this case, if DELAY + MINDELAY > HOST-TABLE.DELAY, the path is longer
  1110.         than one already in HOST-TABLE, so the procedure does nothing.
  1111.  
  1112.     2.  This step is reached only if either the route to host HID is via the
  1113.         net-output process associated with this HELLO process or the newly
  1114.         reported path to this host is shorter by at least MINDELAY.  
  1115.         There are two cases:
  1116.  
  1117.         Case 1:  HOST-TABLE.DELAY < MAXDELAY.
  1118.             The existing path to host HID is up and this is a point-to-point
  1119.             link (HLO.BROADCAST is set to zero).  If DELAY < MAXDELAY the
  1120.             newly reported path is also up.  Proceed to the next step.
  1121.             Otherwise, initiate a hold-down cycle by setting
  1122.             MAXDELAY -> HOST-TABLE.DELAY and
  1123.             HOLD-DOWN-INTERVAL -> HOST-TABLE.TTL and return.
  1124.  
  1125.         Case 2:  HOST-TABLE.DELAY >= MAXDELAY.
  1126.             The existing path to host HID is down.  If DELAY < MAXDELAY and
  1127.             HOST-TABLE.TTL is zero, the hold-down period has expired and the
  1128.             newly reported path has just come up.  Proceed to the next step.
  1129.             Otherwise simply return.
  1130.  
  1131.     3.  In this step the HOST-DELAY entry is updated.  Set
  1132.         DELAY -> HOST-TABLE.DELAY, HOLD-DOWN-INTERVAL -> HOST-TABLE.TTL and
  1133.         HLO.PID -> HOST-TABLE.PID.
  1134.  
  1135.  
  1136. DCN Local-Network Protocols                                        Page 21
  1137. D.L. Mills
  1138.  
  1139.  
  1140.     4.  For precise timekeeping, the offset can be considered valid only if
  1141.         the length of the last HELLO packet transmitted is equal to
  1142.         the length of the last one received.  Thus, if HLO.LENGTH
  1143.         equal to PKT.LENGTH, set OFFSET -> HOST-TABLE.OFFSET;
  1144.         otherwise, leave this field alone. Finally, if HID is equal to
  1145.         CLOCK-HID and bit 15 (the DATE-VALID bit) 
  1146.         of DATE is zero, set PKT.DATESTAMP -> DATE and call the SET-CLOCK
  1147.         procedure of the CLOCK process with argument HLO.TIMESTAMP.
  1148.  
  1149. OUTPUT-PACKET Event
  1150.     This event is evoked once every HELLO-INTERVAL seconds.  It determines if
  1151.     a HELLO message is to be transmitted, transmits it and updates state
  1152.     variables.
  1153.  
  1154.     1.  If HLO.KEEP-ALIVE is nonzero decrement its value.
  1155.  
  1156.     2.  If HLO.POLL is zero and HLO.KEEP-ALIVE is zero, do not send a HELLO
  1157.         message.  If either is nonzero initialize the packet fields as
  1158.         follows:  LOCAL-ADDRESS -> PKT.SOURCE,
  1159.         HLO.NEIGHBOR-ADDRESS -> PKT.DESTINATION and DATE -> PKT.DATESTAMP.
  1160.         Note:  PKT.DESTINATION is set to zero if this is a broadcast link
  1161.         (HLO.BROADCAST set to one).  Also, note that bit 15 of DATE is the
  1162.         DATE-VALID bit.  If this bit is one the receiver will not update its
  1163.         master clock from the information in the transmitted packet.
  1164.         This is significant only if the sending host is on the
  1165.         least-delay path to the master clock.  Set PKT.TIMESTAMP to
  1166.         the value returned from the READ-CLOCK procedure.  If
  1167.         HLO.KEEP-ALIVE is zero or HOLD is nonzero, set PKT.TSP to
  1168.         zero;  otherwise, set PKT.TIMESTAMP + HLO.TSP -> PKT.TSP.
  1169.         
  1170.     3.  Determine if the neighbor is on the same net or subnet.  If the
  1171.         neighbor is on a different net set PKT.NHOSTS to zero and
  1172.         proceed with the next step.  Otherwise, set NHOSTS ->
  1173.         PKT.NHOSTS and for each value of HID from zero to PKT.HOSTS-1
  1174.         copy the HOST-TABLE.DELAY and HOST-TABLE.OFFSET fields of the
  1175.         corresponding HOST-TABLE entry in order into the packet.  For
  1176.         each entry copied test if the HOST-TABLE.PID field matches the
  1177.         HLO.PID of the HELLO process.  If so, a potential routing loop
  1178.         is possible.  In this case use MAXDELAY for the delay field in
  1179.         the packet instead. 
  1180.         
  1181.     4.  Finally, set HLO.LENGTH to the number of octets in the packet 
  1182.         and send the packet.
  1183.  
  1184. 3.4.  HOST Process (HOS)
  1185.  
  1186.      This process maintains the routing tables.  It is activated once per
  1187. second to scan HOST-TABLE and decrement the HOST-TABLE.TTL field of each
  1188. entry.  It also performs housekeeping functions.
  1189.  
  1190.  
  1191. DCN Local-Network Protocols                                        Page 22
  1192. D.L. Mills
  1193.  
  1194.  
  1195. 3.4.1.  Local variables
  1196.  
  1197. HOS.PID
  1198.     This is an eight-bit integer used to identify the HOST process.  It is
  1199.     initialized by the kernel when the process is created and remains
  1200.     unchanged thereafter.
  1201.  
  1202. HOS.HID
  1203.     This is an eight-bit temporary variable.
  1204.  
  1205. 3.4.2.  Events and Procedures
  1206.  
  1207. SCAN Event
  1208.     This event is evoked once each second to scan the HOST-TABLE and perform
  1209.     housekeeping functions.
  1210.  
  1211.     1.  For each value of a temporary variable F from zero to NHOSTS-1 do the
  1212.         following:  Set LOCAL-ADDRESS -> ADDRESS and call the ROUTE
  1213.         procedure, which will return the host ID HID.  If F is equal
  1214.         to HID, then set both DELAY and OFFSET to zero, HOS.PID -> PID
  1215.         and call the UPDATE procedure.  This will cause all packets
  1216.         received with the local address to be routed to this process.
  1217.         
  1218.         If HOST-TABLE.TTL is zero skip this step.  Otherwise, decrement
  1219.         HOST-TABLE.TTL by one.  If the result is nonzero skip the
  1220.         remainder of this step.  Otherwise, If HOST-TABLE.DELAY <MAXDELAY set
  1221.         HOLDOFF-INTERVAL -> HOST-TABLE.TTL and MAXDELAY -> HOST-TABLE.DELAY.
  1222.         The effect of this step is to declare a hold-down cycle when a host
  1223.         goes down.
  1224.  
  1225. 4.  References
  1226.  
  1227. 1.  Mills, D.L.  Final Report on Internet Research, ARPA Packet Switching
  1228.     Program.  Technical Report TSLAB 82-7, COMSAT Laboratories, 
  1229.     December 1982.
  1230.  
  1231. DCN Local-Network Protocols                                        Page 23
  1232. D.L. Mills
  1233.  
  1234.  
  1235. Appendix A.  Link-Level Packet Formats
  1236.  
  1237. A.1.  Serial Links Using Program-Interrupt Interfaces
  1238.  
  1239.      Following is a description of the frame format used on
  1240. asynchronous and synchronous serial links with program-interrupt
  1241. interfaces such as the DEC DLV11 and DPV11.  This format provides
  1242. transparency coding for all messages, including HELLO messages, but
  1243. does not provide error detection or retransmission functions.  It is
  1244. designed to be easily implemented and compatible as far as possible
  1245. with standard industry protocols.
  1246.  
  1247.      The protocol is serial-by-bit, with the same interpretation on
  1248. the order of transmission as standard asynchronous and synchronous
  1249. interface devices; that is, the low-order bit of each octet is
  1250. transmitted first.  The data portion of the frame consists of one
  1251. Internet datagram encoded according to a "character-stuffing"
  1252. transparency convention:
  1253.  
  1254. 1.  The frame begins with the two-octet sequence DLE-STX, in the case of
  1255.     asynchronous links, or the four-octet sequence SYN-SYN-DLE-STX, in the
  1256.     case of synchronous links.  The data portion is transmitted next,
  1257.     encoded as described below, followed by the two-octet sequence
  1258.     DLE-ETX.  No checksum is transmitted or expected.  If it is
  1259.     necessary for any reason to transmit time-fill other than in the
  1260.     data portion, the DEL (all ones) is used.
  1261.     
  1262. 2.  Within the data portion of the frame the transmit buffer is
  1263.     scanned for a DLE.  Each DLE found causes the sequence DLE-DLE to
  1264.     be transmitted.  If it is necessary for some reason for the
  1265.     transmitter to insert time-fill within the data portion, the
  1266.     sequence DLE-DEL is used. 
  1267.     
  1268. 3.  While scanning the data stream within the data portion of the
  1269.     frame the sequence DLE-DLE is found, a single DLE is inserted in
  1270.     the receive buffer.  If the sequence DLE-ETX is found, the buffer
  1271.     is passed on for processing. The sequence DLE-DEL is discarded.
  1272.     Any other two-octet sequence beginning with DLE and ending with
  1273.     other than DLE, ETX or DEL is considered a protocol error 
  1274.     (see note below). 
  1275.     
  1276.      Note: In the case of synchronous links using program-interrupt
  1277. interfaces such as the DPV11, for example, a slightly modified
  1278. protocol is suggested when both ends of the link concur.  These
  1279. interfaces typically provide a parameter register which can be loaded
  1280. with a code used both to detect the receiver synchronizing pattern and
  1281. for time-fill when the transmit buffer register cannot be serviced in
  1282. time for the next character.
  1283.  
  1284.      The parameter register must be loaded with the SYN code for this
  1285. protocol to work properly.  However, should it be necessary to
  1286. transmit time-fill, a single SYN will be transmitted, rather than the
  1287. DLE-DEL sequence specified.  Disruptions due to these events can be
  1288. minimized by use of the following rules:
  1289.  
  1290.  
  1291. DCN Local-Network Protocols                                        Page 24
  1292. D.L. Mills
  1293.  
  1294.  
  1295. 1.  If the transmitter senses a time-fill condition (usually by a
  1296.     control bit assigned for this purpose) between frames or
  1297.     immediately following transmission of a DLE, the condition is ignored.
  1298.     
  1299. 2.  If the transmitter senses a time-fill condition at other times it sends
  1300.     the sequence DLE-CAN.
  1301.  
  1302. 3.  If the receiver finds a SYN either between frames or immediately
  1303.     followoing DLE, the SYN is discarded without affecting sequence
  1304.     decoding. 
  1305.  
  1306. 4.  If the receiver finds the sequence DLE-CAN in the data portion, it
  1307.     discards the sequence and the immediately preceding octet.
  1308.  
  1309.      These rules will work in cases where a single SYN has been
  1310. inserted by the transmitter and even when a SYN has been inserted in
  1311. the DLE-CAN sequence.  If an overrun (lost data) condition is sensed
  1312. at the receiver, the appropriate action is to return to the
  1313. initial-synchronization state.  This should also be the action if any
  1314. code other than STX is found following the initial DLE.  or if any
  1315. code other than DLE, ETX, DEL or CAN is found following a DLE in the
  1316. data portion.
  1317.  
  1318. A.2.  Serial Links Using DDCMP Devices
  1319.  
  1320.      Following is a description of the frame format used on DEC DDCMP links
  1321. with DMA interfaces such as the DEC DMV11 and DMR11.  These interfaces
  1322. implement the DEC DDCMP protocol, which includes error detection and
  1323. retransmission capabilities.  The DDCMP frame format is as follows:
  1324.  
  1325. +-------------+-----+-----+-----+-----+-----+------+------+------+
  1326. | SYN SYN SOH |Count|Flag |Resp | Seq | Adr | CRC1 | Data | CRC2 |
  1327. +-------------+-----+-----+-----+-----+-----+------+------+------+
  1328. bits   24       14     2     8     8     8     16     ...    16
  1329.  
  1330. With respect to this diagram, each octet is transmitted starting from the
  1331. leftmost octet, with the bits of each octet transmitted low-order bit first.
  1332. The contents of all fields except the "Data" field are managed by the
  1333. interface.  The Internet datagram is placed in this field as-is, with no
  1334. character or bit stuffing (the extent of this field is indicated by the
  1335. interface in the "Count" field.
  1336.  
  1337. A.3.  Serial Links Using HDLC Devices
  1338.  
  1339.      Following is a description of the frame format used on HDLC links with
  1340. program-interrupt interfaces such as the DEC DPV11.
  1341.  
  1342.         +--------+--------+--------+--------+--------+--------+
  1343.         |  Flag  |  Addr  |  Ctrl  |  Data  |  CRC   |  Flag  |
  1344.         +--------+--------+--------+--------+--------+--------+
  1345. coding   01111110 00000000 00000000 xxxxxxxx cccccccc 01111110
  1346.  
  1347.  
  1348. DCN Local-Network Protocols                                        Page 25
  1349. D.L. Mills
  1350.  
  1351.  
  1352. With respect to this diagram, each octet is transmitted starting from
  1353. the leftmost octet, with the bits of each octet transmitted low-order
  1354. bit first.  The code xxxxxxxx represents the data portion and cccccccc
  1355. represents the checksum.  The bits between the "Flag" fields are
  1356. encoded with a bit-stuffing convention in which a zero bit is stuffed
  1357. following a string of five one bits.  The "Addr" and "Ctrl" fields are
  1358. not used and the checksum is ignored.  The Internet datagram is placed
  1359. in the "Data" field, which must be a multiple of eight bits in length.
  1360.  
  1361. A.4.  ARPANET 1822 Links Using Local or Distant Host Interfaces
  1362.  
  1363.      Following is a description of the frame format used with ARPANET
  1364. 1822 Local or Distant Host interfaces.  These interfaces can be used
  1365. to connect a DCN host to an ARPANET IMP, Gateway or Port Expander or
  1366. to connect two DCN hosts together.  When used to connect a DCN host to
  1367. an ARPANET IMP, Gateway or Port Expander, a 96-bit 1822 leader is
  1368. prepended ahead of the Internet datagram.  The coding of this leader
  1369. is as described in BBN Report 1822.  When used to connect two DCN
  1370. hosts together, no leader is used and the frame contains only the
  1371. Internet datagram.
  1372.  
  1373. A.5.  ARPANET 1822 Links Using HDH Interfaces
  1374.  
  1375.      Following is a description of the frame format used with ARPANET
  1376. 1822 HDH interfaces.  These interfaces can be used to connect a DCN
  1377. host to an ARPANET IMP or Gateway or to connect two DCN hosts
  1378. together.  In either case, the frame format is as described in
  1379. Appendix J of BBN Report 1822.
  1380.  
  1381. A.6.  X.25 LAPB Links Using RSRE Interfaces
  1382.  
  1383.      Following is a description of the frame format used on X.25 LAPB
  1384. links with the Royal Signals and Radar Establishment interfaces.
  1385. These interfaces implement the X.25 Link Access Protocol - Balanced
  1386. (LAPB), also known as the frame-level protocol, using a frame format
  1387. similar to that described under A.3 above.  Internet datagrams are
  1388. placed in the data portion of I frames and encoded with the
  1389. bit-stuffing procedure described in A.3.  There is no packet-level
  1390. format used with these interfaces.
  1391.  
  1392. A.7.  Ethernet Links
  1393.  
  1394.      Following is a description of the frame format used on Ethernet links.
  1395.  
  1396.         +-----------+-----------+------+------+-----+
  1397.         | Dest Addr | Srce Addr | Type | Data | CRC |
  1398.         +-----------+-----------+------+------+-----+
  1399. bits          48          48       16     ...   32
  1400.  
  1401. With respect to this diagram, each field is transmitted starting from
  1402. the leftmost field, with the bits of each field transmitted low-order
  1403. bit first.  The "Dest Addr" and "Srce Addr" contain 48-bit Ethernet
  1404. addresses, while the "Type" field contains the assigned value for IP
  1405. datagrams (0800 hex) or for
  1406.  
  1407. DCN Local-Network Protocols                                        Page 26
  1408. D.L. Mills
  1409.  
  1410.  
  1411. ARP datagrams (0806 hex).  The Internet datagram is placed in the
  1412. "Data" field and followed by the 32-bit checksum.  The Address
  1413. Resolution Protocol (ARP) is used to establish the mapping between
  1414. Ethernet address and Internet addresses.
  1415.  
  1416.  
  1417.